/**
 * User: qihailong
 * ProjectName : DHDS
 * FileName : NodeAdapter.js
 * Date: 2018/7/9
 * Time: 10:17
 * Dis : 表单数据和最终json之间的双向转换方法
 */

// import getRoleById from './getRoleById'

// 节点节本信息
let currentNodeBasicInfor = {
  // node Id
  nodeId: '',
  // 节点名称
  nodeName: '',
  // 节点类型（0：起始节点 1：中间节点 2：结束节点） ,
  postcondition:'', //  (string, optional): 后置条件设置(JSON)：父节点前置条件为并发或鉴别的，该节点不允许设置后置条件；父节点前置条件为唯一的，该节点必须设置后置条件 ,
  precondition:'', //前置条件设置(0：并发1：鉴别2：唯一)：当节点属性为并发或鉴别时，子节点不允许设置后置条件；当节点属性为唯一时，子节点必须设置后置条件 ,
  nodeType: '',
  //  关联表单key
  formKey: '',
  // 提醒方式（11，第一位表示短信提醒，第二位表示消息提醒）,
  remindType: '',
  // 节点描述
  nodeDesc: '',
};
/**
 * 从节点数据-》表单数据
 * @param node
 * @return {{
 * 	nodeId: (NodeSetting.uuid|*),
 * 	nodeName: *,
 * 	nodeType: (string),
 * 	formKey: (string|*|formKey|{get}),
 * 	remindType: Array,
 * 	nodeDesc: (string|*)}}
 */
let nodeToFormByNodeBasicInfor = function (node) {
  let remindType = [];
  if (node.remindType && typeof node.remindType === 'string') {
	switch (node.remindType) {
	  case '11' :
		remindType = ['短信提醒', '手机推送'];
		break;
	  case '10' :
		remindType = ['短信提醒'];
		break;
	  case '01' :
		remindType = ['手机推送'];
		break;
	  case '00' :
		remindType = [];
		break;
	}
  }
  let participantType = '';
  if (node.participantType) {
	participantType = node.participantType === '0' ? '角色' : node.participantType === '1' ? '部门' : node.participantType === '2' ? '人员' : '';
  }

  return {
    // 基本信息
	currentNodeBasicInfor: {
	  // node Id
	  nodeId: node.uuid,
	  // 节点名称
	  nodeName: node.nodeName,
	  // 节点类型 （0：起始节点 1：中间节点 2：结束节点） ,
	  nodeType: node.type==='begin'?'0':node.type==='ordinary'?'1':node.type==='end'?'2':'',
	  precondition: node.precondition || '',
	  postcondition: node.postcondition || '',
	  //  关联表单key
	  formKey: node.formKey || '',
	  // 提醒方式（11，第一位表示短信提醒，第二位表示消息提醒）,
	  remindType: remindType,
	  // 节点描述
	  nodeDesc: node.nodeDesc || '',
	},
	// 参与者
	nodeParticipant: {
	  participantType: participantType,
	  // 角色
	  roleValue : node.roleValue,
	  // 部门或人员显示名称
	  showName : node.showName,
	  participantId: node.participantId || '',
	  participantName: node.participantName || '',

	},
	// 表达式
	nodeExpressionData:node.postcondition ,
  };
};
/**
 * 根据表单信息，更新节点信息
 * @param currentNode 当前节点
 * @param nodeBasicInfor 节点基本信息
 * @param nodeParticipant 节点参与者
 * @param nodeExpressionData 表达式
 * @return {Node}
 */
let formToNodeByNodeBasicInfor = function (currentNode, nodeBasicInfor, nodeParticipant,nodeExpressionData) {
  let remindType = ['0', '0'];
  if (nodeBasicInfor.remindType && typeof nodeBasicInfor.remindType === 'object') {
	if (nodeBasicInfor.remindType.includes('短信提醒')) {
	  remindType[0] = '1';
	}
	if (nodeBasicInfor.remindType.includes('手机推送')) {
	  remindType[1] = '1';
	}
  }

  let participantType = '';
  if (nodeParticipant.participantType) {
	participantType = nodeParticipant.participantType === '角色' ? '0' : nodeParticipant.participantType === '部门' ? '1' : nodeParticipant.participantType === '人员' ? '2' : '';
  }
  // 基本信息
  currentNode.nodeName = nodeBasicInfor.nodeName;
  // 前置条件 并发、唯一、鉴别
  currentNode.precondition = nodeBasicInfor.precondition;
  currentNode.nodeType = currentNode.type==='begin'?'0':currentNode.type==='ordinary'?'1':currentNode.type==='end'?'2':'';

  currentNode.formKey = nodeBasicInfor.formKey;
  currentNode.remindType = remindType.join('');
  currentNode.nodeDesc = nodeBasicInfor.nodeDesc;
  // 参与者
  currentNode.participantType = participantType;
  currentNode.roleValue = nodeParticipant.roleValue;
  // 如果参与者是角色
  if(currentNode.participantType === '0'){
	currentNode.participantId = nodeParticipant.selectValue.value;
	currentNode.participantName = nodeParticipant.selectValue.label;
  }else if(currentNode.participantType === '1'){
    // 如果参与者是部门
	currentNode.participantId = nodeParticipant.participantId;
	currentNode.participantName = nodeParticipant.participantName;
	currentNode.showName = nodeParticipant.showName;
  }else if(currentNode.participantType === '2'){
	// 如果参与者是部门
	currentNode.participantId = nodeParticipant.participantId;
	currentNode.participantName = nodeParticipant.participantName;
	currentNode.showName = nodeParticipant.showName;
  }else{

  }
  // let participant = getRoleById(nodeParticipant.participantId).then()


  // 表达式
  currentNode.postcondition = nodeExpressionData;

  return currentNode;
};
export default {
  nodeToFormByNodeBasicInfor,
  formToNodeByNodeBasicInfor,
}
